 /*******************************************************************************
  * Copyright (c) 2006, 2007 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/

 package org.eclipse.ui.internal.handlers;

 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jface.preference.PreferenceDialog;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.dialogs.PreferencesUtil;
 import org.eclipse.ui.handlers.HandlerUtil;

 /**
  * <p>
  * Shows the given preference page. If no preference page id is specified in the
  * parameters, then this opens the preferences dialog to whatever page was
  * active the last time the dialog was shown.
  * </p>
  * <p>
  * This class is not intended for use outside of the
  * <code>org.eclipse.ui.workbench</code> plug-in.
  * </p>
  *
  * @since 3.2
  */
 public final class ShowPreferencePageHandler extends AbstractHandler {

     /**
      * The name of the parameter providing the view identifier.
      */
     private static final String PARAMETER_ID_PREFERENCE_PAGE_ID = "preferencePageId"; //$NON-NLS-1$

     public final Object execute(final ExecutionEvent event)
             throws ExecutionException {
         final String preferencePageId = event
                 .getParameter(PARAMETER_ID_PREFERENCE_PAGE_ID);
         final IWorkbenchWindow activeWorkbenchWindow = HandlerUtil
                 .getActiveWorkbenchWindowChecked(event);

         final Shell shell = activeWorkbenchWindow.getShell();
         if (shell == null) {
             throw new ExecutionException("no shell for active workbench window"); //$NON-NLS-1$
 }

         final PreferenceDialog dialog = PreferencesUtil
                 .createPreferenceDialogOn(shell, preferencePageId, null, null);
         dialog.open();

         return null;
     }

 }

